#ifndef PRINT_H
#define PRINT_H

#include "main.h"
#include "string.h"
#include "memory.h"
#include "vga.h"

// Bildschirmgröße
#define SCREEN_WIDTH 80
#define SCREEN_HEIGHT 25
#define SCREEN_SIZE (SCREEN_WIDTH*SCREEN_HEIGHT)*2

/* Setzt die Textausgabefarbe
 * Parameter: Farbe
 * Rückgaben: Keine
 */
void setTextColor(char);

/* Gibt die Textausgabefarbe zurück
 * Parameter: Keine
 * Rückgaben: Farbe
 */
char getTextColor();

/* Leert den Bildschirm
 * Parameter: Keine
 * Rückgaben: Keine
 */
void clearscreen();

/* Scrollt den Bildschirm nach oben
 * Parameter: Zeilen
 * Rückgaben: Keine
 */
void scrollscreen (int);

/* Schreibt den Buffer in den Video RAM
 * Parameter: Keine
 * Rückgaben: Keine
 */
void printscreen();

/* Schreibt ein Zeichen in den Video RAM
 * Parameter: Zeichen, Position X, Position Y
 * Rückgaben: Keine
 */
void putchar (char c, short pos_x, short pos_y);

/* Schreibt einen char-Array in den Video RAM
 * Parameter: Ausgabestring, sofort ausgeben
 * Rückgaben: Keine
 */
void print_ex (const char *str);

/* Schreibt einen char-Array in den Video RAM
 * Parameter: Ausgabestring
 * Rückgaben: Keine
 */
void print(const char *str);

/* Gibt einen formatierten String aus .... es ist printf verdammt!
 * Unterstützte Formatbezeichner: %i, %d, %u, %p, %c, %s, %x, %o
 * Unterstützt werden einfache Formatbezeichner Flags wie zB: %03i
 * Parameter: Ausgabestring, ...
 * Rückgaben: Ausgegebene Bytes
 */
int printf (const char *str, ...);

/* Gibt einen formatierten String aus, wird von printf aufgerufen
 * Parameter: Formatierungs String, Pointer auf eine va_list Liste
 * Rückgaben: Ausgegebene Bytes
 */
int printf_ex (const char *, va_list *);

#endif
